WebSockets এবং Server-Sent Events (SSE) হল দুইটি গুরুত্বপূর্ণ প্রযুক্তি, যা রিয়েল-টাইম যোগাযোগ নিশ্চিত করতে ব্যবহৃত হয়। ASP.Net এ এই দুটি প্রযুক্তি ব্যবহারের মাধ্যমে, আপনি সার্ভার এবং ক্লায়েন্টের মধ্যে দ্বিমুখী যোগাযোগ বা একমুখী ডাটা ফিডিং সহজভাবে সেটআপ করতে পারেন।
WebSockets হল একটি যোগাযোগ প্রোটোকল যা client-server এর মধ্যে পুরোপুরি দ্বিমুখী, স্থায়ী এবং রিয়েল-টাইম যোগাযোগের সুবিধা প্রদান করে। এটি একটি ওপেন কনেকশন তৈরি করে, যা সার্ভার এবং ক্লায়েন্ট উভয়ের মধ্যে ডাটা আদান-প্রদান করতে সক্ষম। WebSocket গুলি মূলত HTTP রিকুয়েস্টের মাধ্যমে শুরু হয়, তবে পরবর্তীতে তারা একটি TCP/IP কনেকশনে স্যুইচ করে, যা কম ল্যাটেন্সি এবং স্থির ডাটা ট্রান্সফার প্রস্তাব করে।
ASP.Net Core তে WebSocket সমর্থন শুরু করতে হলে, আপনাকে প্রথমে Startup.cs ফাইলে WebSocket middleware কনফিগার করতে হবে।
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
// WebSocket middleware configuration
app.UseWebSockets();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
public class WebSocketHandler
{
private readonly RequestDelegate _next;
public WebSocketHandler(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
if (context.WebSockets.IsWebSocketRequest)
{
var webSocket = await context.WebSockets.AcceptWebSocketAsync();
await HandleWebSocketAsync(webSocket);
}
else
{
await _next(context);
}
}
private async Task HandleWebSocketAsync(WebSocket webSocket)
{
var buffer = new byte[1024 * 4];
WebSocketReceiveResult result;
do
{
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), WebSocketMessageType.Text, true, CancellationToken.None);
} while (!result.CloseStatus.HasValue);
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
}
}
const socket = new WebSocket('ws://localhost:5000/socket');
socket.onopen = function(event) {
console.log('WebSocket is connected');
socket.send("Hello Server");
};
socket.onmessage = function(event) {
console.log("Message from server: " + event.data);
};
socket.onclose = function(event) {
console.log('WebSocket is closed');
};
Server-Sent Events (SSE) হল একটি ওয়েব প্রযুক্তি যা একমুখী (server-to-client) রিয়েল-টাইম ডাটা ট্রান্সফার করতে ব্যবহৃত হয়। SSE প্রোটোকল HTTP এর উপর ভিত্তি করে কাজ করে এবং ক্লায়েন্টকে সার্ভার থেকে পুশ ডাটা প্রদান করতে সক্ষম। এটি মূলত এমন অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত, যেখানে সার্ভার বারবার ক্লায়েন্টকে নতুন ডাটা পাঠাতে চায়, যেমন নিউজ ফিড, লাইভ সাপোর্ট, বা স্টক মার্কেট আপডেট।
SSE ব্যবহারের জন্য, সার্ভার থেকে ক্লায়েন্টকে পুশ ডাটা পাঠাতে হবে, যেটি একটি text/event-stream
কনটেন্ট টাইপে পাঠানো হয়।
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
[HttpGet("/events")]
public async Task GetSse()
{
Response.ContentType = "text/event-stream";
for (int i = 0; i < 100; i++)
{
await Response.WriteAsync($"data: {DateTime.Now}\n\n");
await Response.Body.FlushAsync();
await Task.Delay(1000); // Delay between events
}
}
}
const eventSource = new EventSource('/events');
eventSource.onmessage = function(event) {
console.log('New message from server: ' + event.data);
};
eventSource.onerror = function(event) {
console.error("Error occurred in EventSource connection.");
};
বৈশিষ্ট্য | WebSockets | Server-Sent Events (SSE) |
---|---|---|
কমিউনিকেশন টাইপ | দ্বিমুখী (server-to-client এবং client-to-server) | একমুখী (server-to-client) |
প্রোটোকল | WebSocket (TCP) | HTTP |
স্ট্যান্ডার্ড | RFC 6455 | HTML5 |
ব্যবহার | চ্যাট অ্যাপ্লিকেশন, গেমস, লাইভ ডাটা ফিড | লাইভ আপডেট, নিউজ ফিড, স্টক মার্কেট |
পোর্ট | সাধারণত পোর্ট 80 বা 443 (HTTP/HTTPS) | পোর্ট 80 বা 443 (HTTP/HTTPS) |
ডাটা ফরম্যাট | বাইনারি বা টেক্সট | টেক্সট |
WebSockets এবং Server-Sent Events (SSE) দুটি শক্তিশালী প্রযুক্তি যা রিয়েল-টাইম কমিউনিকেশন সিস্টেম তৈরিতে ব্যবহৃত হয়। WebSockets দ্বিমুখী কমিউনিকেশন সুবিধা প্রদান করে এবং ডাটা আদান-প্রদান দ্রুত হয়, তবে এটি একটু বেশি কনফিগারেশন এবং সাপোর্ট চায়। অপরদিকে, SSE সহজ এবং HTTP ভিত্তিক একমুখী কমিউনিকেশন সুবিধা প্রদান করে, যা সাধারণত লাইভ ডাটা ফিডের জন্য উপযুক্ত।
Read more